﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.OleDb;
using System.Data;
using System.Collections;
namespace DAO
{
    public class TimKiemDAO
    {
        public static DataProvider dataPro = new DataProvider();

        public static ArrayList CombineString(string [] strSplitted, int iMembersToCombine)
        {
            ArrayList arrCombined = new ArrayList(strSplitted.Length / iMembersToCombine);
            for (int i = 0; i < strSplitted.Length; i += iMembersToCombine)
            {
                string temp = "";
                for (int j = i; j < i + iMembersToCombine && j < strSplitted.Length; j++)
                {
                    temp += strSplitted[j];
                    if (j < i + iMembersToCombine - 1)
                        temp += " ";
                }
                arrCombined.Add(temp);
            }
            return arrCombined;
        }

        public static int LayMaTieuChiTimKiem(ref string keyword, string strFieldName,string strQuery)
        {

            int iMaTieuChi = -1;

            DataTable kq = new DataTable();

            // chia nhỏ từ khóa
            string [] strSplitter = {" "};
            string[] strSplitted = keyword.Split(strSplitter, StringSplitOptions.RemoveEmptyEntries);

            string strQueryFinal = strQuery + " '" + keyword + "'";

            kq = dataPro.ExecuteQuery(strQueryFinal);

            if (kq.Rows.Count > 0)
            {
                iMaTieuChi = Convert.ToInt32(kq.Rows[0][strFieldName]);
                return iMaTieuChi;
            }
            
            int iNToCombine = strSplitted.Length-1;
            for (int i = iNToCombine; i > 1; i--)
            {
                //gom nhóm dần để tìm "nha tro quan 5" -> "nha tro quan" -> "nha tro"
                ArrayList temp = CombineString(strSplitted, i);
                for (int j = 0; j < temp.Count; j++)
                {
                    strQueryFinal = strQuery + " '" + temp[j] + "'";
                    kq = dataPro.ExecuteQuery(strQueryFinal);

                    if (kq.Rows.Count > 0) // có kết quả
                    {
                        //keyword = ""; // loại bỏ phần từ khóa đã nhận dạng được
                        
                        //for (int k = 0; k < temp.Count; k++)
                        //{
                        //    if (k != j)
                        //    {
                        //        keyword += temp[k];
                        //        if (k < temp.Count - 1)
                        //            keyword += " ";
                        //    }

                        //}
                        
                        iMaTieuChi = Convert.ToInt32(kq.Rows[0][strFieldName]);
                        return iMaTieuChi;
                    }
                }

            }






         

            return iMaTieuChi; // không có kết quả tìm thấy
        }

        public static DataTable LayKetQuaTimKiem(string keyword)
        {


            DataTable kq = new DataTable();

            

            int iMaDichVu, iMaDiaDiem, iMaDuong,iMaPhuong, iMaQuanHuyen, iMaTinhThanh;
            iMaDichVu = iMaDiaDiem = iMaDuong = iMaPhuong = iMaQuanHuyen = iMaTinhThanh = -1;

            //lấy mã dịch vụ
            string strFieldName = "MaDichVu";
            string strQuery = "SELECT DV.MaDichVu  FROM TUKHOADICHVU DV WHERE DV.TuKhoaDichVu like ";            
            iMaDichVu = LayMaTieuChiTimKiem(ref keyword,strFieldName, strQuery);

            //lấy mã địa điểm
            strFieldName = "MaTenDiaDiem";
            strQuery = "SELECT DD.MaTenDiaDiem  FROM TUKHOADIADIEM DD WHERE DD.TuKhoaTenDiaDiem like ";
            iMaDiaDiem = LayMaTieuChiTimKiem(ref keyword, strFieldName, strQuery);

            //lấy mã đường
            strFieldName = "MaDuong";
            strQuery = "SELECT D.MaDuong  FROM TUKHOADUONG D WHERE D.TuKhoaDuong like ";
            iMaDuong = LayMaTieuChiTimKiem(ref keyword, strFieldName, strQuery);

            //lấy mã phường
            strFieldName = "MaPhuong";
            strQuery = "SELECT P.MaPhuong  FROM TUKHOAPHUONG P WHERE P.TuKhoaPhuong like ";
            iMaPhuong = LayMaTieuChiTimKiem(ref keyword, strFieldName, strQuery);

            //lấy mã quận / huyện
            strFieldName = "MaQuanHuyen";
            strQuery = "SELECT Q.MaQuanHuyen  FROM TUKHOAQUANHUYEN Q WHERE Q.TuKhoaQuanHuyen like ";
            iMaQuanHuyen = LayMaTieuChiTimKiem(ref keyword, strFieldName, strQuery);

            //lấy mã tỉnh thành
            strFieldName = "MaTinhThanh";
            strQuery = "SELECT T.MaTinhThanh  FROM TUKHOATINHTHANH T WHERE T.TuKhoaTinhThanh like ";
            iMaTinhThanh = LayMaTieuChiTimKiem(ref keyword, strFieldName, strQuery);

            // tìm theo số nhà

            strFieldName = "SoNha";
            strQuery = "SELECT DL.SoNha FROM DULIEU DL WHERE DL.SoNha=";
            int iSoNha = -1;
            iSoNha = LayMaTieuChiTimKiem(ref keyword, strFieldName, strQuery);
            string mainQuery = "SELECT * FROM  DULIEU DL WHERE (1 = 1)";

            if (iMaDichVu != -1)
                mainQuery += " AND DL.MaDichVu="+iMaDichVu;
            //if(iMaDiaDiem != -1)
            //    mainQuery += " AND DL.MaTenDiaDiem=" + iMaDiaDiem;
            //if(iSoNha!=-1)
            //    mainQuery += " AND DL.SoNha=" + iSoNha;
            if(iMaDuong!=-1)
                mainQuery += " AND DL.MaDuong=" + iMaDuong;

            if(iMaPhuong!=-1)
                mainQuery += " AND DL.MaPhuong=" + iMaPhuong;

            if (iMaQuanHuyen != -1)
                mainQuery += " AND DL.MaQuanHuyen=" + iMaQuanHuyen;
            if (iMaTinhThanh != -1)
                mainQuery += " AND DL.MaTinhThanh=" + iMaTinhThanh;


            kq = dataPro.ExecuteQuery(mainQuery);
            return kq;
        }
    }
}